#ifndef __BASE_DE-CONOCIMIENTOS_MANAGER_H__
#define __BASE_DE_CONOCIMIENTOS_MANAGER_H__

#include <map>
#include <vector>
#include <algorithm>

#include "KeywordsRepository.h"

using namespace std;
using namespace basededatos;

namespace basedeconocimientos {

	#define COMENTARIOS_MATERIAS_PATH "C:\\gestor carrera\\base de datos\\comentarios_materias.txt" 

	typedef struct DiaCatedraMateriaDTO {
		string codigoMateria;
		string codigoCatedra;
		string dia;
		int peso;
	};

	struct ComparadorDTO {
      bool operator()(const DiaCatedraMateriaDTO unDTO, const DiaCatedraMateriaDTO otroDTO) {
		  return unDTO.peso < otroDTO.peso;
      }
    };

	class BaseDeConocimientosManager
	{
	
	public:
		BaseDeConocimientosManager(void);
		~BaseDeConocimientosManager(void);
	
		vector<DiaCatedraMateriaDTO> ObtenerMateriasPrescindibles();
		vector<DiaCatedraMateriaDTO> ObtenerMateriasSinChequeoDeAsistencia();
		vector<DiaCatedraMateriaDTO> ObtenerMateriasDificultosas();
	
	private:
		ManejadorDeArchivos* manejadorDeArchivos;
		KeywordsRepository* keywordsRepository;

		bool EmpiezaInformacionDeUnaMateria(string linea);
		void EvaluarLineaParaMateria(map<string,DiaCatedraMateriaDTO> *matrizMaterias, list<string> &keywordsQueSuman, 
			list<string> &keywordsQueRestan, string linea, string codigoMateriaActual);
		vector<DiaCatedraMateriaDTO> ObtenerMaterias(list<string> &keywordsQueSuman, list<string> &keywordsQueRestan);
		string ObtenerCodigoMateria(string linea);
		string ObtenerCodigoCatedra(string linea);
	};

}
#endif